class Solution {
public:
    int generateKey(int num1, int num2, int num3) {
        // 法一：使用字符串
        // string s;
        // for(int i = 0; i < 4; i++)
        // {
        //     int t = (min({num1 % 10, num2 % 10, num3 % 10}));
        //     s = to_string(t) + s;
        //     num1 /= 10;
        //     num2 /= 10;
        //     num3 /= 10;
        // }
        // return stoi(s);

        // 法二：数位遍历，不用字符串
        // 从最低位开始枚举，取三个数在该数位的最小值加入答案
        // 然后把三个数都除以 10，继续枚举数位
        // 循环直到其中一个数等于 0 为止，因为后面的数位，最小值都是 0

        int ans = 0;
        // for(int i = 0; i < 4; i++)
        for(int i = 0; num1 && num2 && num3; i++)
        {
            int t = (min({num1 % 10, num2 % 10, num3 % 10}));
            ans += t * pow(10, i);  // 这里不能写成 10 ^ i，这样变成按位异或了
            num1 /= 10;
            num2 /= 10;
            num3 /= 10;
        }
        return ans;
    }
};